#include "defines.hpp"


Cena cena;
Menu m;



void RedimensionaJanela(GLsizei w, GLsizei h)
{
    GLfloat faixa = 100.0f;
    GLfloat aspectratio;

    if(h==0) h=1; //Evitar divisao por zero

    glViewport(0, 0, w, h);

    //Resetar sistema de coordenadas
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    //Calcular aspecto da nova janela
    //aspectratio = (GLfloat) w / (GLfloat) h ;
    /*if (w<=h)
       glOrtho(-faixa, faixa, -faixa/aspectratio, faixa/aspectratio, faixa, -faixa);
    else
       glOrtho(-faixa*aspectratio, faixa*aspectratio, -faixa, faixa, faixa, -faixa);
    */

    glOrtho(-1,1,-1,1,-1,1);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

void Inicializacao(){
  glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  glColor3f(0.0f,1.0f, 0.0f);
  glFrontFace(GL_CCW);
  glEnable(GL_CULL_FACE);
  glShadeModel(GL_FLAT);
}

void Desenha(void){

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    if (cena.getAtivo() == true){
        cena.Renderiza();
    }
    else {
      m.Renderiza();
    }

}

void TeclasEspeciais(int key, int x, int y){

    if ((cena.getAtivo()==true)){
        cena.Teclas(key);
    } else {
        m.Teclas(key,cena);
    }
}

void Teclado(unsigned char key, int x, int y){

   cena.TeclasComando(key);
}

void Idle (void){
    if (cena.n.tiros.size()>0){
       unsigned int i = 0;
       for (i=0;i<cena.n.tiros.size();i++){
          cena.n.tiros.at(i).SetZ(cena.n.tiros.at(i).GetZ()+0.01f);
          if (cena.n.tiros.at(i).GetZ()>0.95){
            cena.n.tiros.erase(cena.n.tiros.begin()+i);
          }

       }
       glutPostRedisplay();
    }
}

int main(int argc, char* argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE| GLUT_RGBA | GLUT_DEPTH);
    glutInitWindowSize(640,480);
    glutCreateWindow("GLUT Teste - Pontos");
    Inicializacao();
    glutSpecialFunc(TeclasEspeciais);
    glutKeyboardFunc(Teclado);
    glutDisplayFunc(Desenha);
    glutReshapeFunc(RedimensionaJanela);
    glutIdleFunc(Idle);
    glutMainLoop();
    return 0;
}

